package com.kkb.kkbportal.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kkb.kkbportal.domain.Score;
import com.kkb.kkbportal.domain.dto.ScoreDto;
import com.kkb.kkbportal.domain.vo.DetailAvgStarVo;
import com.kkb.kkbportal.domain.vo.DetailScoreVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author qtds
 * @since 2021-08-12
 */
public interface ScoreService extends IService<Score> {

    /**
     * 添加一个评分
     *
     * @param scoreDto 评分对象dto
     */
    void addScore(ScoreDto scoreDto);

    /**
     * 依据评价人id、被评价人id、项目id更新评价信息
     *
     * @param scoreDto 评分对象dto
     */
    void updateByMasterIdAndSlaveIdAndObjectId(ScoreDto scoreDto);

    /**
     * 根据id更新评价信息
     *
     * @param id       评分主键id
     * @param scoreDto 评分对象dto
     */
    void updateById(Long id, ScoreDto scoreDto);

    /**
     * 返回所有评分集合
     *
     * @return 所有score评分
     */
    List<Score> listAll();

    /**
     * 根据id删除评分
     *
     * @param id 评分主键id
     */
    void deleteById(Long id);

    /**
     * 返回被评分人的平均评分(按三类分数除以3来判断)
     * 注：不根据评价人分类搜索，如：甲方评价必须要甲方id集合来搜索
     *
     * @param slaveId 被评人id
     * @return 平均分(BigDecimal类型)
     */
    BigDecimal countAvgSlaveStar(Long slaveId);

    /**
     * 返回被评分人指定评价人的评价(如：甲方评价，学员评价等)
     *
     * @param slaveId   被评人id
     * @param masterIds 评价人id集合
     * @return 平均分(BigDecimal类型)
     */
    BigDecimal countAvgSlaveStar(Long slaveId, List<Long> masterIds);

    /**
     * 根据被评价人id计算综合得分列表（group by 评价人角色）
     *
     * @param slaveId 被评价人id
     * @return 平均分列表信息DetailAvgStarVo
     * @Author qtds(chenYong)
     */
    List<DetailAvgStarVo> avgStarListBySlaveId(Long slaveId);

    /**
     * 根据被评价人id，查找所获得的评价列表
     *
     * @param slaveId 被评价人id
     * @return 评价列表
     * @author syt
     */
    List<DetailScoreVo> selectScoreDetailListBySlaveId(Long slaveId);

}
